#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#define BUFFER_SIZE 1024

int main(int argc, char *argv[]) {
    int src_fd, dest_fd;
    ssize_t bytes_read, bytes_written;
    char buffer[BUFFER_SIZE];

    // 检查参数数量
    if (argc != 3) {
        fprintf(stderr, "用法: %s <源文件路径> <目标文件路径>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    // 打开源文件
    src_fd = open(argv[1], O_RDONLY);
    if (src_fd == -1) {
        perror("打开源文件失败");
        exit(errno);
    }

    // 创建或覆盖目标文件（如果不存在会自动创建）
    dest_fd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (dest_fd == -1) {
        perror("创建/打开目标文件失败");
        close(src_fd);
        exit(errno);
    }

    // 循环读取并写入数据
    while ((bytes_read = read(src_fd, buffer, BUFFER_SIZE)) > 0) {
        bytes_written = write(dest_fd, buffer, bytes_read);
        if (bytes_written != bytes_read) {
            perror("写入目标文件失败");
            close(src_fd);
            close(dest_fd);
            exit(EXIT_FAILURE);
        }
    }

    if (bytes_read == -1) {
        perror("读取源文件失败");
        close(src_fd);
        close(dest_fd);
        exit(errno);
    }

    printf("✅ 文件复制成功。\n");

    // 关闭文件描述符
    close(src_fd);
    close(dest_fd);

    return 0;
}
